/**
 * ---- Classe EkSOl----
 *  * Troisième famille Ek : <BR>
 *      On définit E0 comme étant vide, En est formé de 5 segments. <BR>
 *      Les 5 segments ont une extrémité commune, deux segments "consécutifs" forment un angle de 72°. <BR>
 *      La deuxième extrémité de chacun des segments est le centre d'une copie de En-1. <BR><BR>
 *      
 *      Remarque : la longueur des segments doit dépendre de n.
 *        
 * @author Alexandre Boursier, Nolan Potier <BR>
 * @version 20/12/2011
 *
 */

package exercice_3;

import java.awt.Color;
import java.awt.Graphics;

public class EkSol extends Ek {

    private static final long serialVersionUID = 7542156470675093591L;

    /**
     * Constructeur normal
     * 
     * @param profondeur
     *          le nombre d'itérations
     */
    public EkSol(int prof) {
        super(prof);
    }

    /**
     * Méthode récursive pour dessiner les éléments de la classe Ek selon une profondeur k donnée <BR>
     * 
     * @param x                 
     *          Abscisse du centre de l'étoile cible
     * @param y                 
     *          Ordonnée du centre de l'étoile cible
     * @param longueur
     *          Longueur des segments à dessiner.
     * @param arc
     *          Nombre d'arcs à dessiner
     * @param angle
     *          Ecart entre chaque arc
     * @param k                 
     *          Profondeur de la récursion.
     * @param drawingArea       
     *          Outil nécessaire au dessin.
     * 
     */
    @Override
    public void drawEk(double x, double y, int longueur, int arc, int angle, int k, Graphics drawingArea) {

        int angleCourant=angle;

        // Dessiner les arcs au niveau de profondeur souhaité
        for (int i = 1; i <= arc; i++){
            // Modifier la couleur en fonction du degré de profondeur
            if (k%3 == 0) drawingArea.setColor(Color.green);
            else if(k%2 == 0) drawingArea.setColor(Color.red);
            else drawingArea.setColor(Color.blue);
            // Tracer la ligne cible parmi les arcs
            drawingArea.drawLine((int) x,(int) y,
                    (int)(x+longueur*Math.cos(angleCourant*2*Math.PI/360)),
                    (int)(y+longueur*Math.sin(angleCourant*2*Math.PI/360)));
            // Se déplacer  pour l'arc suivant
            angleCourant += 360/arc;
        }
        angleCourant=angle;
        // Traiter le cas de la recursion
        if (k > 1) {
            for (int i = 1; i <= arc; i++){
                drawEk((int)(x+longueur*Math.cos(angleCourant*2*Math.PI/360)),
                        (int)(y+longueur*Math.sin(angleCourant*2*Math.PI/360)),
                        (int)(longueur/2.6), arc, angleCourant, k-1, drawingArea);
                angleCourant += 360/arc;
            }
        }
    }
}
